import { get, post, put, del, getWithPagination, postWithPagination } from './commonApi.js'

/**
 * 课程相关API接口
 */
export const courseApi = {
  /**
   * 获取课程列表（分页查询）
   * @param {Object} options - 分页选项
   * @param {number} options.currentPage - 当前页码，默认为1
   * @param {number} options.size - 每页数量，默认为10
   * @param {Object} options.otherParams - 其他查询参数
   * @returns {Promise} 分页课程列表数据
   */
  getCourseList: (options = {}) => {
    return getWithPagination('/course/list', options)
  },

  /**
   * 课程模糊查询
   * @param {string} name - 课程名称关键字
   * @returns {Promise} 课程列表
   */
  fuzzyQueryCourse: (name) => get('/course/fuzzyQuery', { name }),

  /**
   * 查询课程基本信息
   * @param {string} id - 课程ID
   * @returns {Promise} 课程基本信息
   */
  getCourseBaseInfo: (id) => {
    return get('/course/search', { id })
  },

  /**
   * 根据课程序号和年级查询课程
   * @param {string} courseId - 课程序号
   * @param {number} grade - 年级
   * @returns {Promise} 课程基本信息
   */
  getCourseByCourseIdAndGrade: (courseId, grade) => {
    return get('/course/searchByCourseAndGrade', { courseId, grade })
  },

  /**
   * 课程名称模糊搜索
   * @param {string} name - 课程名称
   * @returns {Promise} 课程名称列表
   */
  fuzzyQueryCourse: (name) => {
    return get('/course/fuzzyQuery', { name })
  },

  /**
   * 选择课程
   * @param {Object} params - 查询参数
   * @param {number} params.grade - 年级
   * @param {string} params.major - 专业
   * @param {string} params.courseId - 课程序号（必填，可为空字符串）
   * @param {string} params.courseName - 课程名称（必填，可为空字符串）
   * @returns {Promise} 课程信息及毕业要求，包含majorName字段
   */
  selectCourse: (params) => {
    return get('/course/select', params)
  },

  /**
   * 新增课程
   * @param {Object} courseData - 课程数据
   * @param {string} courseData.courseId - 课程序号
   * @param {string} courseData.name - 课程名称
   * @param {string} courseData.major - 专业
   * @param {number} courseData.grade - 年级
   * @returns {Promise} 创建结果
   */
  addCourse: (courseData) => {
    return post('/course/add', courseData)
  },

  /**
   * 新增课程基本信息
   * @param {Object} courseData - 课程基本信息数据
   * @returns {Promise} 创建结果，返回mongodb自动生成的_id
   */
  addCourseBaseInfo: (courseData) => {
    return post('/course/baseinfo/add', courseData)
  },

  /**
   * 更新课程基本信息
   * @param {Object} courseData - 课程基本信息数据
   * @param {string} courseData.id - 课程ID
   * @returns {Promise} 更新结果
   */
  updateCourseBaseInfo: (courseData) => {
    return post('/course/baseinfo/update', courseData)
  },

  /**
   * 更新课程信息
   * @param {Object} courseData - 课程数据
   * @param {string} courseData.id - 课程ID
   * @param {string} courseData.courseId - 课程序号
   * @param {string} courseData.name - 课程名称
   * @param {string} courseData.major - 专业
   * @param {number} courseData.grade - 年级
   * @returns {Promise} 更新结果
   */
  updateCourseInfo: (courseData) => {
    return post('/course/update', courseData)
  },

  /**
   * 删除课程
   * @param {string} id - 课程ID
   * @returns {Promise} 删除结果
   */
  deleteCourse: (id) => {
    return del('/course/del', { id })
  },

  /**
   * 保存课程目标与毕业要求对应关系
   * @param {Object} params - 保存参数
   * @param {string} params.courseId - 课程ID
   * @param {Array} params.goal_relation - 课程目标与毕业要求对应关系列表
   * @param {string} params.goal_relation[].course_goal - 课程目标
   * @param {number} params.goal_relation[].graduation_requirement - 支撑的毕业要求序号id
   * @param {string} params.goal_relation[].graduation_index - 支撑的毕业要求指标点
   * @param {string} params.goal_relation[].support_degree - 支撑度（H、M、L）
   * @returns {Promise} 保存结果
   */
  saveCourseGoalRelation: (params) => {
    return post('/course/goalRelation/save', params)
  },

  /**
   * 查询课程目标与毕业要求对应关系
   * @param {string} courseId - 课程ID
   * @returns {Promise} 课程目标与毕业要求对应关系列表
   */
  queryCourseGoalRelation: (courseId) => {
    return get('/course/goalRelation/query', { courseId })
  },

  /**
   * 查询课程目标列表
   * @param {string} id - 课程ID（mongodb的_id）
   * @returns {Promise} 课程目标名称列表
   */
  queryCourseGoals: (id) => {
    return get('/course/goal/query', { id })
  },

  /**
   * 保存课程内容关系（章节信息）
   * @param {Object} params - 保存参数
   * @param {string} params.courseId - 课程ID（mongodb的_id）
   * @param {Array} params.content_relation - 章节内容列表
   * @param {string} params.content_relation[].content - 课程内容（章节名称）
   * @param {string} params.content_relation[].method - 教学方法
   * @param {Array} params.content_relation[].goal - 支撑的课程目标（目标ID数组）
   * @param {string} params.content_relation[].political_element - 思政元素
   * @param {number} params.content_relation[].period - 学时安排（数字）
   * @returns {Promise} 保存结果
   */
  saveCourseContent: (params) => {
    return post('/course/content_relation/save', params)
  },

  /**
   * 查询课程内容关系（章节信息）
   * @param {string} id - 课程ID（mongodb的_id）
   * @returns {Promise} 课程章节内容列表
   */
  queryCourseContent: (id) => {
    return get('/course/content_relation/query', { id })
  },

  /**
   * 查询章节详细信息
   * @param {string} courseId - 课程ID（mongodb的_id）
   * @param {number} chapterId - 章节序号（数组中的顺序，从0开始）
   * @returns {Promise} 章节详细信息
   */
  queryChapterDetail: (courseId, chapterId) => {
    return get('/course/chapter_detail/query', { courseId, chapterId })
  },

  /**
   * 保存章节详细信息（新增或更新）
   * @param {Object} params - 保存参数
   * @param {string} params.courseId - 课程ID（mongodb的_id）
   * @param {number} params.chapterId - 章节序号（数组中的顺序，从0开始）
   * @param {string} params.knowage_goal - 知识目标
   * @param {string} params.ability_goal - 能力目标
   * @param {string} params.EAV_goal - 情感与价值观目标
   * @param {string} params.study_content - 学习内容
   * @param {string} params.important - 重点
   * @param {string} params.difficult - 难点
   * @param {string} params.lead_in_content - 课堂导入内容
   * @param {number} params.lead_in_duration - 课堂导入时长
   * @param {string} params.content_in_class - 课堂教学内容
   * @param {string} params.summary_content - 课堂小结内容
   * @param {number} params.summary_duration - 课堂小结时长
   * @param {string} params.tool_and_resource - 教学工具或资源
   * @param {string} params.practice - 课程实践
   * @param {string} params.review - 复习思考
   * @param {string} params.reflect - 教学反思
   * @returns {Promise} 保存结果
   */
  saveChapterDetail: (params) => {
    return post('/course/chapter_detail/save', params)
  },

  /**
   * 查询考核方式信息
   * @param {string} courseId - 课程ID（mongodb的_id）
   * @returns {Promise} 考核方式信息
   */
  queryAssessment: (courseId) => {
    return get('/course/assessment/query', { courseId })
  },

  /**
   * 保存考核方式信息（新增或更新）
   * @param {Object} params - 保存参数
   * @param {string} params.courseId - 课程ID（mongodb的_id）
   * @param {string} params.method - 考核方式
   * @param {string} params.course_goal - 课程目标
   * @param {string} params.exam_content - 考核内容及占比
   * @param {string} params.remark - 备注
   * @param {number} params.usual_percentage - 平时成绩占比
   * @param {number} params.final_percentage - 期末成绩占比
   * @param {string} params.usual_desc - 平时成绩评定说明
   * @param {string} params.final_desc - 期末成绩评定说明
   * @returns {Promise} 保存结果
   */
  saveAssessment: (params) => {
    return post('/course/assessment/save', params)
  }
}

export default courseApi
